package com.cw2.creatation.prototype;

import com.sun.xml.internal.bind.v2.TODO;

import java.util.HashMap;
import java.util.Map;

public class Mybatis {

    // Mybatis的一级缓存
    private Map<String, User> userCache = new HashMap<>();

    /**
     * 从数据库查询
     * @param username
     * @return
     */
    public User getUser(String username){
        User user = null;
        if (!userCache.containsKey(username)){
            // todo 原型模式核心
            // 数据库拿的也是克隆对象
            User userFromDb = getUserFromDb(username);
            user = (User) user.clone();
            if (null != user){
                userCache.put(username, userFromDb);
            }
        }else {
            // 从缓存中直接拿,脏缓存问题
            // 原型已经拿到,但是不能直接给
            user = userCache.get(username);
            // todo 原型模式核心
            // 缓存拿的也是克隆对象
            user = (User) user.clone();
        }
        return user;

    }

    private User getUserFromDb(String username) {
        System.out.println("从数据库中查询数据" + username + "并且返回了");
        // 从数据库查询
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        return user;
    }
}
